package com.atguigu.gmall.product.service;

import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;


import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @Description: TODO
 * @Author: Mr.Cao
 * @DateTime: 2021/9/28 19:08
 * BMW F750GS
 **/
public interface ManageService {
    //获取一级分类
    List<BaseCategory1> getCategory1();
    //获取二级分类
    List<BaseCategory2> getCategory2(long category1Id);
    //获取三级分类
    List<BaseCategory3> getCategory3(long category2Id);
    //根据分类id获取平台属性
    Object attrInfoList(long category1Id, long category2Id, long category3Id);
    //保存平台属性
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);
    //根据平台属性ID获取平台属性
    List<BaseAttrValue> getAttrValueList(long attrId);
    //获取spu分页列表
    IPage<SpuInfo> selectPageSpuInfo(long page, long limit,long category3Id);
    //分页获取品牌列表
    IPage<BaseTrademark> baseTrademark(long page, long limit);
    //保存品牌列表
    void baseTrademarkSave(BaseTrademark baseTrademark);
    //编辑品牌列表,数据回显,根据id查询品牌信息
    BaseTrademark getBaseTrademarkById(long id);
    //根据id 删除品牌列表
    void removeBaseTrademarkById(long id);
    //获取品牌列表 , 用于添加商品属性spu时回显
    List<BaseTrademark> getTrademarkList();
    //获取销售属性,用于添加商品属性spu时回显
    List<BaseSaleAttr> baseSaleAttrList();
    //根据id 更新品牌信息
    void updateBaseTrademark(BaseTrademark baseTrademark);
    //添加spu 商品列表
    void saveSpuInfo(SpuInfo spuInfo);
    //分页获取sku列表
    IPage getSkuPage(long page, long limit);
    //sku商品上架
    void onSale(Long skuId);
    //sku商品下架
    void cancelSale(Long skuId);
    //根据spuId获取图片列表
    List<SpuImage> spuImageList(long spuId);
    //根据spuId获取销售属性
    List<SpuSaleAttr> spuSaleAttrList(long spuId);
    //保存sku商品
    void saveSkuInfo(SkuInfo skuInfo);
    //根据ID查询skuInfo表
    SkuInfo getSkuInfoById(long skuId);
    //一二三级分类 查询id 和名称
    BaseCategoryView getCategory123(long category3Id);
    //单独查询价格, 查询实时价格, 直接查询数据库中的价格, 不查询缓存中的价格
    BigDecimal getPrice(long skuId);

    //根据spuId，skuId 查询销售属性集合
    //查询销售属性及选中的属性
    List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long skuId, Long spuId);
    // 根据spuId 查询map 集合属性 组合与对应skuId
    Map getSkuValueIdsMap(Long spuId);
    //查询所有分类视图 集合
    List<BaseCategoryView> getBaseCategoryViewList();
    //根据品牌ID查询品牌信息
    BaseTrademark getBaseTrademark(Long tmId);
    //查询某某款 sku商品的平台属性集合
    List<SkuAttrValue> getSkuAttrValueAndAttrAndAttrValue(long skuId);
}
